package pms.dao;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import pms.om.Sperrtag;

public class SperrtagDao extends HibernateDaoSupport {
	
	/**
	 * R&uuml;ckgabe eines Sperrtages anhand seiner id
	 * @param id
	 */
	
	public Sperrtag findById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Sperrtag) template.get(Sperrtag.class, id);
	}
	
	/**
	 * R&uuml;ckgabe aller Sperrtage
	 */
	
	@SuppressWarnings("unchecked")
	public Set<Sperrtag> findAll() {
		HibernateTemplate template = getHibernateTemplate();
		List<Sperrtag> allesperrtage = template.loadAll(Sperrtag.class);
		Set<Sperrtag> results = new HashSet<Sperrtag>();
		for (Sperrtag sperrtag : allesperrtage) {
			results.add(sperrtag);
		}
		return results;
	}

	/**
	 * Einen neuen Sperrtag anlegen
	 * @param sperrtagname
	 */
	public void create(String sperrtagname) {
		HibernateTemplate template = getHibernateTemplate();
		Sperrtag f = new Sperrtag(sperrtagname);
		template.persist(f);
	}
	
	/**
	 * &auml;ndere Sperrtag mit einer bestimmten id auf die neu mit &uuml;bergebenen Eigenschaften um
	 * @param id
	 * @param sperrtagname
	 */
	
	public void modify(int id, String sperrtagname) {
		HibernateTemplate template = getHibernateTemplate();
		Sperrtag s = (Sperrtag) template.get(Sperrtag.class, id);
		s.setSperrtagname(sperrtagname);
		template.saveOrUpdate(s);
		template.flush();
	}
	
	/**
	 * l&ouml;sche Sperrtag mit bestimmter id
	 * @param id
	 */
	
	public boolean deleteById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		boolean result = false;
		Sperrtag s = findById(id);
		if (s.getJahremitdensperrtagen().isEmpty()) {  // nur wenn Sperrtag nicht zugeordnet
			template.delete(s);  						// dann löschbar
			template.flush();
			result = true;
		}
		return result;
	}
	
	/**
	 * R&uuml;ckgabe des Set weniger des Sperrtages 	
	 * @param s
	 * @param ss
	 */
	
	public Set<Sperrtag> findAllebisaufEinen(Sperrtag s, Set<Sperrtag> ss) {
		Set<Sperrtag> result = new HashSet<Sperrtag>();
		for (Sperrtag sperrtag : ss) {
			if (!sperrtag.equals(s)) {
				result.add(sperrtag);
			}
		}
		return result;
	}

	/**
	 * R&uuml;ckgabe aller Sperrtage ohne die Sperrtage des &uuml;bergebenen Sets
	 * @param ss
	 */
	
	public Set<Sperrtag> findeallesperrtagedienichtzugeordnet(Set<Sperrtag> ss) {
		Set<Sperrtag> result = findAll();
		for (Sperrtag sperrtag : ss) {
			result = findAllebisaufEinen(sperrtag, result);
		}
		return result;
	}

	/**
	 * wenn der Sperrtag schon vorhanden ist, oder wenn eine falsche Eingabe erfolgt
	 * (Sperrtage k&ouml;nnen nur sein 1 = Sonntag, 2 = Montag bis 7 = Samstag usw...)
	 * dann wird false zur&uuml;ckgeben, wenn nicht, dann true
	 * 
	 * @param sperrtagname
	 */
	
	public boolean sperrtageingabeokundnichtdoppelt(int sperrtagname) {
		boolean result = false;
		if ( (sperrtagname == 1) || (sperrtagname == 2) || (sperrtagname == 3) || (sperrtagname == 4) || (sperrtagname == 5) || (sperrtagname == 6) ||  (sperrtagname == 7)) {
				result = true;
		}
		for (Sperrtag sperrtag : findAll()) {
			if (Integer.parseInt(sperrtag.getSperrtagname()) == sperrtagname) {
				result = false;
			}
		}
		return result;
	}

}

